package manager.com.ithei.edu.info.manager.dao;

import manager.com.ithei.edu.info.manager.domain.Student;

import java.io.*;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer;

public class OtherStudentDao implements BaseStudentDao {
    // 创建学生对象数组
    //静态代码块执行顺序
    private static ArrayList<Student> stus = new ArrayList<Student>();

    static {
        System.out.println("- - - - - - - - - - loading...........");
        try {
            //1.
            FileInputStream fis=new FileInputStream("StudentManageSystem\\stu.txt");
            //2.循环读,将文件中所有的数据都读入内存
            byte[] bys=new byte[1024*1024];
            int len=fis.read(bys);
            //3.
            String allStudent=new String(bys,0,len);
            //4.先通过换行符切割
            String[] split = allStudent.split(System.lineSeparator());
            //5.先遍历拿到没一个学生的信息
            for (int i = 0; i < split.length; i++) {
                //再根据,对单个学生信息进行切割
                String[] ss=split[i].split(",");
                Student stu=new Student(ss[0],ss[1],ss[2],ss[3],ss[4]);
                stus.add(stu);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    // 添加学生方法
    @Override
    public boolean addStudent(Student stu) {
        Collections.addAll(stus, stu);
        //保存数据到文件中去方法1
        reSave01();
        return true;
    }

    // 查看学生方法
    @Override
    public Student[] findAllStudent() {
        //保存数据到文件中去方法1
        reSave01();
        return stus.toArray(new Student[stus.size()]);

    }

    //删除指定id的学生
    @Override
    public void deleteStudentByIdTwo(String id) {
        int index = getIndex(id);
        stus.remove(index);
        //保存数据到文件中去方法1
        reSave01();
    }

    //获取学号对应对象的索引
    @Override
    public int getIndex(String id) {
        int index = -1;
        for (int i = 0; i < stus.size(); i++) {
            index=stus.get(i) != null && stus.get(i).getSid().equals(id)?i:-1;
        }
        return index;
    }

    //通过id设置学生对象
    @Override
    public void setStudentByIdTwo(String id, Student stu) {
        //通过学号查找集合中对应的索引值
        int index = getIndex(id);
        //集合添加元素
        stus.set(index, stu);
        //保存数据到文件中去方法1
        reSave01();
    }

    //将系统中最新的数据写出到文件,进行存档---给予普通字节输出流
    public static void reSave01(){

        try {
            //1.创建一个字节输出流对象
            FileOutputStream fos=new FileOutputStream("StudentManageSystem\\stu.txt",true);
            //2.基于输出流对象将集合中的数据写出到文件
            //2.1先遍历集合
            //for (int i = 0; i < stus.size(); i++) {
                //2.2拿到没一个学生对象
            //    Student stu=stus.get(i);
                //2.3通过输出流将当前对象的信息写出到文件
              //  fos.write(stu.toString().getBytes());
                //2.4输出换行
             //   fos.write(System.lineSeparator().getBytes());}
                 stus.forEach(stu->{try {fos.write(stu.toString().getBytes());
                                            fos.write(System.lineSeparator().getBytes());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
            //3.关闭流,释放资源
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
